<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
<head>
  <meta http-equiv='X-UA-Compatible' content='IE=edge' />
  <meta http-equiv='MSThemeCompatible' content='Yes'>

  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>CTextStream Class</title>
  <style type="text/css">
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <style type="text/css">@font-face {font-family: octicons-link;src: url(data:font/woff;charset=utf-8;base64,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) format('woff');}body {-webkit-text-size-adjust: 100%;text-size-adjust: 100%;color: #333;font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size: 16px;line-height: 1.6;word-wrap: break-word;max-width: 99%;box-sizing: border-box;padding: 20px 5px 8rem 5px; margin-left: auto;margin-right: auto;}body a {background-color: transparent;}body a:active,body a:hover {outline: 0;}body strong {font-weight: bold;}body h1 {font-size: 2em;margin: 0.67em 0;}body img {border: 0;}body hr {box-sizing: content-box;height: 0;}body pre {overflow: auto;}body code,body kbd,body pre {font-family: monospace, monospace;font-size: 1em;}body input {color: inherit;font: inherit;margin: 0;}body html input[disabled] {cursor: default;}body input {line-height: normal;}body input[type="checkbox"] {box-sizing: border-box;padding: 0;}body table {border-collapse: collapse;border-spacing: 0;}body td,body th {padding: 0;}body * {box-sizing: border-box;}body input {font: 13px / 1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";}body a {color: #4078c0;text-decoration: none;}body a:hover,body a:active {text-decoration: underline;}body hr {height: 0;margin: 15px 0;overflow: hidden;background: transparent;border: 0;border-bottom: 1px solid #ddd;}body hr:before {display: table;content: "";}body hr:after {display: table;clear: both;content: "";}body h1,body h2,body h3,body h4,body h5,body h6 {margin-top: 15px;margin-bottom: 15px;line-height: 1.1;}body h1 {font-size: 30px;}body h2 {font-size: 21px;}body h3 {font-size: 16px;}body h4 {font-size: 14px;}body h5 {font-size: 12px;}body h6 {font-size: 11px;}body blockquote {margin: 0;}body ul,body ol {padding: 0;margin-top: 0;margin-bottom: 0;}body ol ol,body ul ol {list-style-type: lower-roman;}body ul ul ol,body ul ol ol,body ol ul ol,body ol ol ol {list-style-type: lower-alpha;}body dd {margin-left: 0;}body code {font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;font-size: 12px;}body pre {margin-top: 0;margin-bottom: 0;font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;}body .select::-ms-expand {opacity: 0;}body .octicon {font: normal normal normal 16px/1 octicons-link;display: inline-block;text-decoration: none;text-rendering: auto;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}body .octicon-link:before {content: '\f05c';}body:before {display: table;content: "";}body:after {display: table;clear: both;content: "";}body>*:first-child {margin-top: 0 !important;}body>*:last-child {margin-bottom: 0 !important;}body a:not([href]) {color: inherit;text-decoration: none;}body .anchor {display: inline-block;padding-right: 2px;margin-left: -18px;}body .anchor:focus {outline: none;}body h1,body h2,body h3,body h4,body h5,body h6 {margin-top: 1em;margin-bottom: 16px;font-weight: bold;line-height: 1.4;}body h1 .octicon-link,body h2 .octicon-link,body h3 .octicon-link,body h4 .octicon-link,body h5 .octicon-link,body h6 .octicon-link {color: #000;vertical-align: middle;visibility: hidden;}body h1:hover .anchor,body h2:hover .anchor,body h3:hover .anchor,body h4:hover .anchor,body h5:hover .anchor,body h6:hover .anchor {text-decoration: none;}body h1:hover .anchor .octicon-link,body h2:hover .anchor .octicon-link,body h3:hover .anchor .octicon-link,body h4:hover .anchor .octicon-link,body h5:hover .anchor .octicon-link,body h6:hover .anchor .octicon-link {visibility: visible;}body h1 {padding-bottom: 0.3em;font-size: 1.75em;line-height: 1.2;}body h1 .anchor {line-height: 1;}body h2 {padding-bottom: 0.3em;font-size: 1.5em;line-height: 1.225;}body h2 .anchor {line-height: 1;}body h3 {font-size: 1.25em;line-height: 1.43;}body h3 .anchor {line-height: 1.2;}body h4 {font-size: 1em;}body h4 .anchor {line-height: 1.2;}body h5 {font-size: 1em;}body h5 .anchor {line-height: 1.1;}body h6 {font-size: 1em;color: #777;}body h6 .anchor {line-height: 1.1;}body p,body blockquote,body ul,body ol,body dl,body table,body pre {margin-top: 0;margin-bottom: 16px;}body hr {height: 4px;padding: 0;margin: 16px 0;background-color: #e7e7e7;border: 0 none;}body ul,body ol {padding-left: 2em;}body ul ul,body ul ol,body ol ol,body ol ul {margin-top: 0;margin-bottom: 0;}body li>p {margin-top: 16px;}body dl {padding: 0;}body dl dt {padding: 0;margin-top: 16px;font-size: 1em;font-style: italic;font-weight: bold;}body dl dd {padding: 0 16px;margin-bottom: 16px;}body blockquote {padding: 0 15px;color: #777;border-left: 4px solid #ddd;}body blockquote>:first-child {margin-top: 0;}body blockquote>:last-child {margin-bottom: 0;}body table {display: block;width: 100%;overflow: auto;word-break: normal;word-break: keep-all;}body table th {font-weight: bold;}body table th,body table td {padding: 6px 13px;border: 1px solid #ddd;}body table tr {background-color: #fff;border-top: 1px solid #ccc;}body table tr:nth-child(2n) {background-color: #f8f8f8;}body img {max-width: 100%;box-sizing: content-box;background-color: #fff;}body code {padding: 0;padding-top: 0;padding-bottom: 0;margin: 0;font-size: 85%;background-color: rgba(0,0,0,0.04);border-radius: 3px;}body code:before,body code:after {letter-spacing: -0.2em;content: "\00a0";}body pre>code {padding: 0;margin: 0;font-size: 100%;word-break: normal;white-space: pre;background: transparent;border: 0;}body .highlight {margin-bottom: 16px;}body .highlight pre,body pre {padding: 16px;overflow: auto;font-size: 85%;line-height: 1.45;background-color: #f7f7f7;border-radius: 3px;}body .highlight pre {margin-bottom: 0;word-break: normal;}body pre {word-wrap: normal;}body pre code {display: inline;max-width: initial;padding: 0;margin: 0;overflow: initial;line-height: inherit;word-wrap: normal;background-color: transparent;border: 0;}body pre code:before,body pre code:after {content: normal;}body kbd {display: inline-block;padding: 3px 5px;font-size: 11px;line-height: 10px;color: #555;vertical-align: middle;background-color: #fcfcfc;border: solid 1px #ccc;border-bottom-color: #bbb;border-radius: 3px;box-shadow: inset 0 -1px 0 #bbb;}body .pl-c {color: #969896;}body .pl-c1,body .pl-s .pl-v {color: #0086b3;}body .pl-e,body .pl-en {color: #795da3;}body .pl-s .pl-s1,body .pl-smi {color: #333;}body .pl-ent {color: #63a35c;}body .pl-k {color: #a71d5d;}body .pl-pds,body .pl-s,body .pl-s .pl-pse .pl-s1,body .pl-sr,body .pl-sr .pl-cce,body .pl-sr .pl-sra,body .pl-sr .pl-sre {color: #183691;}body .pl-v {color: #ed6a43;}body .pl-id {color: #b52a1d;}body .pl-ii {background-color: #b52a1d;color: #f8f8f8;}body .pl-sr .pl-cce {color: #63a35c;font-weight: bold;}body .pl-ml {color: #693a17;}body .pl-mh,body .pl-mh .pl-en,body .pl-ms {color: #1d3e81;font-weight: bold;}body .pl-mq {color: #008080;}body .pl-mi {color: #333;font-style: italic;}body .pl-mb {color: #333;font-weight: bold;}body .pl-md {background-color: #ffecec;color: #bd2c00;}body .pl-mi1 {background-color: #eaffea;color: #55a532;}body .pl-mdr {color: #795da3;font-weight: bold;}body .pl-mo {color: #1d3e81;}body kbd {display: inline-block;padding: 3px 5px;font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;line-height: 10px;color: #555;vertical-align: middle;background-color: #fcfcfc;border: solid 1px #ccc;border-bottom-color: #bbb;border-radius: 3px;box-shadow: inset 0 -1px 0 #bbb;}body .task-list-item {list-style-type: none;}body .task-list-item+.task-list-item {margin-top: 3px;}body .task-list-item input {margin: 0 0.35em 0.25em -1.6em;vertical-align: middle;}body :checked+.radio-label {z-index: 1;position: relative;border-color: #4078c0;}</style>
  
    
  
</head>
<body>
<h1 id="ctextstream-class">CTextStream Class</h1>
<p>Allows to read and write sequential text files (sometimes referred to as a text stream). Works with ASCII and Unicode. Works with Windows CRLF files and with Linux LF files.</p>
<p><strong>Include file</strong>: CTextStream.inc</p>
<h3 id="constructors">Constructors</h3>
<p>Besides the default constructor, that initializes the COM library and creates an instance of the ITextStream interface, this additional constructor allows to create an instance of the class by passing a pointer to an existing ITextStream interface that becomes attached to the class (therefore, don't release the passed pointer, it will be released by the CTextStream class).</p>
<pre><code>CONSTRUCTOR CTextStream (BYVAL pstm AS Afx_ITextStream PTR)
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>pstm</em></td>
<td>Pointer to an instance of the Afx_ITextStream interface.</td>
</tr>
</tbody>
</table>
<p>This allows to work with the standard StdIn, StdErr and StdOut streams using the methods of the <strong>CTextStream</strong> class.</p>
<pre><code>#include &quot;Afx/AfxFile.inc&quot;
' // Create an instance of the CTextStream class initialized with a pointer to the standard StdOut stream
DIM pTxtStm AS CTextStream = CFileSys().GetStdOutStream(TRUE)   ' or FALSE to work with ansi
' // Write a string and an end of line to the stream
pTxtStm.WriteLine &quot;This is a test.&quot;
</code></pre>
<h3 id="operators">Operators</h3>
<table>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>LET</td>
<td>Initializes the class from an existing stream and attaches it.</td>
</tr>
<tr class="even">
<td>CAST</td>
<td>Returns a pointer to the underlying ITextStream interface of the text stream object.</td>
</tr>
</tbody>
</table>
<pre><code>OPERATOR LET (BYVAL pstm AS Afx_ITextStream PTR)
OPERATOR CAST () AS Afx_ITextStream PTR
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>pstm</em></td>
<td>A pointer to the ITextStream interface of an existing text stream that will be attached to the class.</td>
</tr>
</tbody>
</table>
<h3 id="methods-and-properties">Methods and properties</h3>
<table>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><a href="#Create">Create</a></td>
<td>Creates a file and returns a TextStream object that can be used to read from or write to the file.</td>
</tr>
<tr class="even">
<td><a href="#Open">Open</a></td>
<td>Opens a file and returns a TextStream object that can be used to read from, write to, or append to the file.</td>
</tr>
<tr class="odd">
<td><a href="#OpenUnicode">OpenUnicode</a></td>
<td>Opens a file and returns a TextStream object that can be used to read from, write to, or append to the file.</td>
</tr>
<tr class="even">
<td><a href="#OpenForInputA">OpenForInputA</a></td>
<td>Opens a file for input and returns a TextStream object that can be used to read from the file.</td>
</tr>
<tr class="odd">
<td><a href="#OpenForInputW">OpenForInputW</a></td>
<td>Opens a file for input and returns a TextStream object that can be used to read from the file.</td>
</tr>
<tr class="even">
<td><a href="#OpenForOutputA">OpenForOutputA</a></td>
<td>Opens a file for putput and returns a TextStream object that can be used to write to the file.</td>
</tr>
<tr class="odd">
<td><a href="#OpenForOutputW">OpenForOutputW</a></td>
<td>Opens a file for putput and returns a TextStream object that can be used to write to the file.</td>
</tr>
<tr class="even">
<td><a href="#OpenForAppendA">OpenForAppendA</a></td>
<td>Opens a file for append and returns a TextStream object that can be used to write to the file.</td>
</tr>
<tr class="odd">
<td><a href="#OpenForAppendW">OpenForAppendW</a></td>
<td>Opens a file for append and returns a TextStream object that can be used to write to the file.</td>
</tr>
<tr class="even">
<td><a href="#Close">Close</a></td>
<td>Closes an open TextStream file.</td>
</tr>
<tr class="odd">
<td><a href="#EOL">EOL</a></td>
<td>Returns TRUE if the file pointer is positioned immediately before the end-of-line marker in a TextStream file; FALSE if it is not.</td>
</tr>
<tr class="even">
<td><a href="#EOS">EOS</a></td>
<td>Returns TRUE if the file pointer is at the end of a TextStream file; FALSE if it is not.</td>
</tr>
<tr class="odd">
<td><a href="#Read">Read</a></td>
<td>Reads a specified number of characters from a TextStream file and returns the resulting string.</td>
</tr>
<tr class="even">
<td><a href="#ReadLine">ReadLine</a></td>
<td>Reads an entire line (up to, but not including, the newline character) from a TextStream file and returns the resulting string.</td>
</tr>
<tr class="odd">
<td><a href="#ReadAll">ReadAll</a></td>
<td>Reads an entire TextStream file and returns the resulting string.</td>
</tr>
<tr class="even">
<td><a href="#Write">Write</a></td>
<td>Writes a specified string to a TextStream file.</td>
</tr>
<tr class="odd">
<td><a href="#WriteLine">WriteLine</a></td>
<td>Writes a specified string and newline character to a TextStream file.</td>
</tr>
<tr class="even">
<td><a href="#WriteBlankLines">WriteBlankLines</a></td>
<td>Writes a specified number of newline characters to a TextStream file.</td>
</tr>
<tr class="odd">
<td><a href="#Skip">Skip</a></td>
<td>Skips a specified number of characters when reading a TextStream file.</td>
</tr>
<tr class="even">
<td><a href="#SkipLine">SkipLine</a></td>
<td>Skips the next line when reading a TextStream file.</td>
</tr>
<tr class="odd">
<td><a href="#Line">Line</a></td>
<td>Returns the current line number in a TextStream file.</td>
</tr>
<tr class="even">
<td><a href="#Column">Column</a></td>
<td>Returns the column number of the current character position in a TextStream file.</td>
</tr>
<tr class="odd">
<td><a href="#GetLastResult">GetLastResult</a></td>
<td>Returns the last result code.</td>
</tr>
</tbody>
</table>
<h1 id="create"><a name="Create"></a>Create</h1>
<p>Creates a specified file name and returns a TextStream object that can be used to read from or write to the file.</p>
<pre><code>FUNCTION Create (BYREF cbsFileName AS CBSTR, _
   BYVAL bOverwrite AS BOOLEAN = TRUE, _
   BYVAL bUnicode AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to create.</td>
</tr>
<tr class="even">
<td><em>bOverwrite</em></td>
<td>Boolean value that indicates whether you can overwrite an existing file. The value is true if the file can be overwritten, false if it can't be overwritten. If omitted, existing files are not overwritten.</td>
</tr>
<tr class="odd">
<td><em>bUnicode</em></td>
<td>Boolean value that indicates whether the file is created as a Unicode or ASCII file. The value is true if the file is created as a Unicode file, false if it's created as an ASCII file. If omitted, an ASCII file is assumed.</td>
</tr>
</tbody>
</table>
<h4 id="return-value">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example">Example</h4>
<pre><code>#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Create a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
pTxtStm.Create(cbsFile, TRUE)
' // Write a string and an end of line to the stream
pTxtStm.WriteLine &quot;This is a test.&quot;
' // Write more strings
pTxtStm.WriteLine &quot;This is a string.&quot;
pTxtStm.WriteLine &quot;This is a second string.&quot;
pTxtStm.WriteLine &quot;This is the end line.&quot;

PRINT
PRINT &quot;Press any key o end...&quot;
SLEEP
</code></pre>
<h1 id="open"><a name="Open"></a>Open</h1>
<p>Opens a specified file and returns a TextStream object that can be used to read from, write to, or append to the file.</p>
<pre><code>FUNCTION Open (BYREF cbsFileName AS CBSTR, _
   BYVAL IOMode AS LONG = 1, _
   BYVAL bCreate AS BOOLEAN = FALSE, _
   BYVAL bUnicode AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>IOMode</em></td>
<td>LONG. Can be one of three constants: IOMode_ForReading, IOMode_ForWriting, or IOMode_ForAppending.</td>
</tr>
<tr class="odd">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
<tr class="even">
<td><em>bUnicode</em></td>
<td>Boolean value that indicates whether the file is created as a Unicode or ASCII file. The value is true if the file is created as a Unicode file, false if it's created as an ASCII file. If omitted, an ASCII file is assumed.</td>
</tr>
</tbody>
</table>
<p>The <em>IOMode</em> argument can have any of the following settings:</p>
<table>
<thead>
<tr class="header">
<th>Constant</th>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>IOMode_ForReading</td>
<td>1</td>
<td>Open a file for reading only. You can't write to this file.</td>
</tr>
<tr class="even">
<td>IOMode_ForWriting</td>
<td>2</td>
<td>Open a file for writing.</td>
</tr>
<tr class="odd">
<td>IOMode_ForAppending</td>
<td>8</td>
<td>Open a file and write to the end of the file.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-1">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-1">Example</h4>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file as a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
pTxtStm.Open(cbsFile, IOMode_ForReading)
' // Read the file sequentially
DIM s AS STRING
DO UNTIL pTxtStm.EOS
   s = pTxtStm.ReadLine
   PRINT s
LOOP
pTxtStm.Close

PRINT &quot;Press any key...&quot;
SLEEP
</code></pre>
<h1 id="openunicode"><a name="OpenUnicode"></a>OpenUnicode</h1>
<p>Opens a specified file and returns a TextStream object that can be used to read from, write to, or append to the file.</p>
<pre><code>FUNCTION OpenUnicode (BYREF cbsFileName AS CBSTR, _
   BYVAL IOMode AS LONG = 1, _
   BYVAL bCreate AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>IOMode</em></td>
<td>LONG. Can be one of three constants: IOMode_ForReading, IOMode_ForWriting, or IOMode_ForAppending.</td>
</tr>
<tr class="odd">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
</tbody>
</table>
<p>The <em>IOMode</em> argument can have any of the following settings:</p>
<table>
<thead>
<tr class="header">
<th>Constant</th>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>IOMode_ForReading</td>
<td>1</td>
<td>Open a file for reading only. You can't write to this file.</td>
</tr>
<tr class="even">
<td>IOMode_ForWriting</td>
<td>2</td>
<td>Open a file for writing.</td>
</tr>
<tr class="odd">
<td>IOMode_ForAppending</td>
<td>8</td>
<td>Open a file and write to the end of the file.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-2">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-2">Example</h4>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file as a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\TestW.txt&quot;
IF pTxtStm.OpenUnicode(cbsFile, IOMode_ForReading) = S_OK THEN
   ' // Read the file sequentially
   DIM cbs AS CBSTR
   DO UNTIL pTxtStm.EOS
      cbs = pTxtStm.ReadLine
      PRINT cbs
   LOOP
   pTxtStm.Close
END IF

PRINT &quot;Press any key...&quot;
SLEEP
</code></pre>
<h1 id="openforinputa"><a name="OpenForInputA"></a>OpenForInputA</h1>
<p>Opens a file for input and returns a TextStream object that can be used to read from the file. (Ansi version.)</p>
<pre><code>FUNCTION OpenForInputA (BYREF cbsFileName AS CBSTR, BYVAL bCreate AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-3">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-3">Example</h4>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // ' // Open file for input as a text stream
IF pTxtStm.OpenForInputA(ExePath &amp; &quot;\Test.txt&quot;) = S_OK THEN
   ' // Read the file sequentially
   DIM s AS STRING
   DO UNTIL pTxtStm.EOS
      s = pTxtStm.ReadLine
      PRINT s
   LOOP
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="openforinputw"><a name="OpenForInputW"></a>OpenForInputW</h1>
<p>Opens a file for input and returns a TextStream object that can be used to read from the file. (Unicode version.)</p>
<pre><code>FUNCTION OpenForInputW (BYREF cbsFileName AS CBSTR, BYVAL bCreate AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-4">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-4">Example</h4>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // ' // Open file for input as a text stream
IF pTxtStm.OpenForInputW(ExePath &amp; &quot;\TestW.txt&quot;) = S_OK THEN
   ' // Read the file sequentially
   DIM cbs AS CBSTR
   DO UNTIL pTxtStm.EOS
      cbs = pTxtStm.ReadLine
      PRINT cbs
   LOOP
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="openforoutputa"><a name="OpenForOutputA"></a>OpenForOutputA</h1>
<p>Opens a file for output and returns a TextStream object that can be used to write to the file. (Ansi version.)</p>
<pre><code>FUNCTION OpenForOutputA (BYREF cbsFileName AS CBSTR, BYVAL bCreate AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-5">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-5">Example</h4>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file for output as a text stream
IF pTxtStm.OpenForOutputA(ExePath &amp; &quot;\Test.txt&quot;) = S_OK THEN
   ' // Write a string and an end of line to the stream
   pTxtStm.WriteLine &quot;This is a test.&quot;
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="openforoutputw"><a name="OpenForOutputW"></a>OpenForOutputW</h1>
<p>Opens a file for output and returns a TextStream object that can be used to write to the file. (Unicode version.)</p>
<pre><code>FUNCTION OpenForOutputW (BYREF cbsFileName AS CBSTR, BYVAL bCreate AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-6">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-6">Example</h4>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file for output as a text stream
IF pTxtStm.OpenForOutputW(ExePath &amp; &quot;\TestW.txt&quot;) = S_OK THEN
   ' // Write a string and an end of line to the stream
   pTxtStm.WriteLine &quot;This is a test.&quot;
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="openforappenda"><a name="OpenForAppendA"></a>OpenForAppendA</h1>
<p>Opens a file for append and returns a TextStream object that can be used to write to the file. (Ansi version.)</p>
<pre><code>FUNCTION OpenForOutputA (BYREF cbsFileName AS CBSTR, BYVAL bCreate AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-7">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-7">Example</h4>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file for append as a text stream
IF pTxtStm.OpenForAppendA(ExePath &amp; &quot;\Test.txt&quot;) = S_OK THEN
   ' // Write a string and an end of line to the stream
   pTxtStm.WriteLine &quot;This is a test.&quot;
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="openforappendw"><a name="OpenForAppendW"></a>OpenForAppendW</h1>
<p>Opens a file for append and returns a TextStream object that can be used to write to the file. (Unicode version.)</p>
<pre><code>FUNCTION OpenForAppendW (BYREF cbsFileName AS CBSTR, BYVAL bCreate AS BOOLEAN = FALSE) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsFileName</em></td>
<td>CBSTR. String expression that identifies the file to open.</td>
</tr>
<tr class="even">
<td><em>bCreate</em></td>
<td>Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-8">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<pre><code>'#CONSOLE ON
#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file for append as a text stream
IF pTxtStm.OpenForAppendW(ExePath &amp; &quot;\TestW.txt&quot;) = S_OK THEN
   ' // Write a string and an end of line to the stream
   pTxtStm.WriteLine &quot;This is a test.&quot;
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="close"><a name="Close"></a>Close</h1>
<p>Closes an open TextStream file.</p>
<pre><code>FUNCTION Close () AS HRESULT
</code></pre>
<h4 id="return-value-9">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h1 id="eol"><a name="EOL"></a>EOL</h1>
<p>Returns TRUE if the file pointer is positioned immediately before the end-of-line marker in a TextStream file; FALSE if it is not.</p>
<pre><code>FUNCTION EOL () AS BOOLEAN
</code></pre>
<h4 id="remark">Remark</h4>
<p>The EOL (End of Line) property applies only to TextStream files that are open for reading; otherwise, an error occurs.</p>
<h1 id="eos"><a name="EOS"></a>EOS</h1>
<p>Returns TRUE if the file pointer is at the end of a TextStream file; FALSE if it is not.</p>
<pre><code>FUNCTION EOS () AS BOOLEAN
</code></pre>
<h4 id="remark-1">Remark</h4>
<p>The EOS (End os Stream) property applies only to TextStream files that are open for reading, otherwise, an error occurs.</p>
<h1 id="read"><a name="Read"></a>Read</h1>
<p>Reads a specified number of characters from a TextStream file and returns the resulting string.</p>
<pre><code>FUNCTION Read (BYVAL numChars AS LONG) AS CBSTR
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>numChars</em></td>
<td>LONG. Number of characters you want to read from the file.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-10">Return value</h4>
<p>CBSTR. A string with the characters read.</p>
<h1 id="readline"><a name="ReadLine"></a>ReadLine</h1>
<p>Reads an entire line (up to, but not including, the newline character) from a TextStream file and returns the resulting string.</p>
<pre><code>FUNCTION ReadLine  () AS CBSTR
</code></pre>
<h4 id="return-value-11">Return value</h4>
<p>CBSTR. A string with the content of the line read.</p>
<h4 id="example-8">Example</h4>
<pre><code>#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file as a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
IF pTxtStm.Open(cbsFile, IOMode_ForReading) = S_OK THEN
   ' // Read the file sequentially
   DO
     IF pTxtStm.EOS THEN EXIT DO
     DIM curLine AS LONG = pTxtStm.Line
     DIM cbsText AS CBSTR = pTxtStm.ReadLine
     PRINT &quot;Line &quot; &amp; STR(curLine) &amp; &quot;: &quot; &amp; cbsText
   LOOP
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="readall"><a name="ReadAll"></a>ReadAll</h1>
<p>Reads an entire TextStream file and returns the resulting string.</p>
<pre><code>FUNCTION ReadAll  () AS CBSTR
</code></pre>
<h4 id="return-value-12">Return value</h4>
<p>CBSTR. A string with the content of all the file.</p>
<h4 id="example-9">Example</h4>
<pre><code>#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file as a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
IF pTxtStm.Open(cbsFile, IOMode_ForReading) = S_OK THEN
   ' // Read all the contents of the file
   DIM cbsText AS CBSTR = pTxtStm.ReadAll
   PRINT cbsText
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="write"><a name="Write"></a>Write</h1>
<p>Writes a specified string to a TextStream file.</p>
<pre><code>FUNCTION Write (BYREF cbsText AS CBSTR) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsText</em></td>
<td>CBSTR. The text you want to write to the file.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-13">Return value</h4>
<p>CBSTR. The text you want to write to the file.</p>
<h4 id="example-10">Example</h4>
<pre><code>#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Create a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
IF pTxtStm.Create(cbsFile, TRUE) = S_OK THEN
   ' // Write strings
   pTxtStm.Write &quot;This is a string.&quot;
   pTxtStm.Write &quot;This is a second string.&quot;
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="writeline"><a name="WriteLine"></a>WriteLine</h1>
<p>Writes a specified string and newline character to a TextStream file.</p>
<pre><code>FUNCTION WriteLine (BYREF cbsText AS CBSTR) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>cbsText</em></td>
<td>CBSTR. The text you want to write to the file. If omitted, a newline character is written to the file.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-14">Return value</h4>
<p>CBSTR. The text you want to write to the file.</p>
<h4 id="example-11">Example</h4>
<pre><code>#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Create a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
IF pTxtStm.Create(cbsFile, TRUE) = S_OK THEN
   ' // Write strings
   pTxtStm.WriteLine &quot;This is a string.&quot;
   pTxtStm.WriteLine &quot;This is a second string.&quot;
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="writeblanklines"><a name="WriteBlankLines"></a>WriteBlankLines</h1>
<p>Writes a specified string and newline character to a TextStream file.</p>
<pre><code>FUNCTION WriteBlankLines (BYVAL numLines AS LONG) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>numLines</em></td>
<td>LONG. Number of newline characters you want to write to the file.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-15">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-12">Example</h4>
<pre><code>#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Create a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
IF pTxtStm.Create(cbsFile, TRUE) = S_OK THEN
   ' // Write a string and an end of line to the stream
   pTxtStm.WriteLine &quot;This is a test.&quot;
   ' // Write more strings
   pTxtStm.Write &quot;This is a string.&quot;
   pTxtStm.Write &quot;This is a second string.&quot;
   ' // Write two blank lines (the first will serve as an end of line for the previous write instructions)
   pTxtStm.WriteBlankLines 2
   pTxtStm.WriteLine &quot;This is the end line.&quot;
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="skip"><a name="Skip"></a>Skip</h1>
<p>Skips a specified number of characters when reading a TextStream file.</p>
<pre><code>FUNCTION Skip (BYVAL numChars AS LONG) AS HRESULT
</code></pre>
<table>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><em>numChars</em></td>
<td>LONG. Number of characters to skip when reading a file.</td>
</tr>
</tbody>
</table>
<h4 id="return-value-16">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h4 id="example-13">Example</h4>
<pre><code>#include &quot;Afx/CTextStream.inc&quot;
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file as a text stream
DIM cbsFile AS CBSTR = ExePath &amp; &quot;\Test.txt&quot;
IF pTxtStm.Open(cbsFile, IOMode_ForReading) = S_OK THEN
   ' // Read the file sequentially
   DO
     ' // Ext if we are at the end of the stream
     IF pTxtStm.EOS THEN EXIT DO
     ' // Current line
     DIM curLine AS LONG = pTxtStm.Line
     ' // Skip the 3rd line
     IF curLine = 3 THEN
        pTxtStm.SkipLine
        curLine + = 1
     END IF
     ' // Skip 10 characters
     pTxtStm.Skip 10
     ' // Current column
     DIM curColumn AS LONG = pTxtStm.Column
     ' // Read 5 characters
     DIM cbsText AS CBSTR = pTxtStm.Read(5)
     ' // Skip the rest of the line
     pTxtStm.SkipLine
     PRINT &quot;Line &quot; + WSTR(curLine) + &quot;, Column &quot; +  WSTR(curColumn) &amp; &quot;: &quot; + cbsText
   LOOP
   '// Close the file
   pTxtStm.Close
END IF

PRINT &quot;Press any key to end...&quot;
SLEEP
</code></pre>
<h1 id="skipline"><a name="SkipLine"></a>SkipLine</h1>
<p>Skips the next line when reading a TextStream file.</p>
<pre><code>FUNCTION SkipLine () AS HRESULT
</code></pre>
<h4 id="return-value-17">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
<h1 id="line"><a name="Line"></a>Line</h1>
<p>Read-only property that returns the current line number in a TextStream file.</p>
<pre><code>PROPERTY Line  () AS LONG
</code></pre>
<h4 id="return-value-18">Return value</h4>
<p>LONG. The current line number.</p>
<h3 id="remarks">Remarks</h3>
<p>After a file is initially opened and before anything is written, Line is equal to 1.</p>
<h1 id="column"><a name="Column"></a>Column</h1>
<p>Read-only property that returns the column number of the current character position in a TextStream file.</p>
<pre><code>PROPERTY Column  () AS LONG
</code></pre>
<h4 id="return-value-19">Return value</h4>
<p>LONG. The current column number.</p>
<h4 id="remarks-1">Remarks</h4>
<p>After a newline character has been written, but before any other character is written, Column is equal to 1.</p>
<h1 id="getlastresult"><a name="GetLastResult"></a>GetLastResult</h1>
<p>Returns the last result code.</p>
<pre><code>FUNCTION GetLastResult () AS HRESULT
</code></pre>
<h4 id="return-value-20">Return value</h4>
<p>HRESULT. S_OK (0) on success, or an error code on failure.</p>
</body>
</html>

